#include <string.h>
#include "result_msg.h"
#include "../thirdparty/cJSON/cJSON.h"
#include "../config.h"

static char* RESULT_MSG = "{\"user\":%d,\"cmd\":%d,\"result\":%d}";


result_msg* create_result_msg(int user_id,int cmd,int result)
{
	result_msg * msg = (result_msg*) robot_malloc(sizeof(result_msg),true);
	if(!cmd )
	{
		dbg_info("create_result_msg:error param");
		return NULL;
	}
	msg->msg_ = robot_malloc(sizeof(msg_base),true);
	msg->msg_->data = robot_malloc(MSG_MAX_LEN*sizeof(char),true);
	msg->msg_->type = MSG_TYPE_RESULT;
	msg->user_id = user_id;
	msg->cmd =  cmd;
	msg->result =  result;
	
	return msg;
}

int distory_result_msg(result_msg * msg)
{
	if(!msg)
	{
		dbg_info("distory_result_msg:error param");
		return MSG_ERROR_NULL_MSG;
	}
	if(msg->msg_) {
		if(msg->msg_->data){
			free(msg->msg_->data);
			msg->msg_->data = NULL;
		}
		free(msg->msg_);
		msg->msg_ = NULL;
	}
	
	free(msg);
	msg = NULL;
	return 0;
}

int serialize_result_msg(result_msg* msg,char** out_msg,int* out_len)
{
	char* data = msg->msg_->data;
	if(!msg){
		dbg_info("serialize_ctlcar_msg:null msg");
		return MSG_ERROR_NULL_MSG;
	}
	msg->msg_->len = sprintf(data,RESULT_MSG,msg->user_id,msg->cmd,msg->result);
	
	return serialize_msg(msg->msg_ , out_msg , out_len);
}

/*

*/
int deserialize_result_msg(char * msg,int len,result_msg** out_msg)
{
	int ret = 0;
	cJSON *jsonroot;
	cJSON *hands_data;
	if(!msg||len<=0){
		dbg_info("deserialize_ctlcar_msg:null msg");
		return MSG_ERROR_NULL_MSG;
	}
	result_msg* res_msg = (result_msg*)robot_malloc(sizeof(result_msg),true);
	ret = deserialize_msg(msg,len,&(res_msg->msg_));
	if(ret){
		dbg_info("deserialize_ctlcar_msg=>deserialize_msg error ret:%d",ret);
		return ret;
	}
	jsonroot = cJSON_Parse(res_msg->msg_->data); 
	res_msg->user_id = cJSON_GetObjectItem(jsonroot,"user")->valueint;
	res_msg->cmd = cJSON_GetObjectItem(jsonroot,"cmd")->valueint;
	res_msg->result = cJSON_GetObjectItem(jsonroot,"result")->valueint;
	
	*out_msg = res_msg;
	if(jsonroot)
		cJSON_Delete(jsonroot);
	return 0;
}





